home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Vollversion / CamD / development / docs / midibasics.doc < prev    next >
Text File  |  2000-05-15  |  6KB  |  112 lines

  1. Parsing MIDI
  2. ~~~~~~~~~~~~
  3.     First off, I suggest that you send for a copy of the MIDI specification
  4. from the International MIDI Association (5316 W. 57th St., Los Angeles, CA
  5. 90056, U.S.A). The cost for the basic specification is $40.00 for non-members.
  6.  
  7.     In the mean time, however, here is a quick summary of some of the most
  8. important aspects of MIDI:
  9.  
  10.     MIDI is primarily a _gestural_ language, in other words it does not
  11. represent sounds or even music, but rather a series of actions by a performer,
  12. such as hitting a key, pressing a pedal, etc. The instrument can interpret
  13. the messages however it chooses (for example, many instruments have a feature
  14. which allows the musical keyboard to be remapped to a set of non-standard
  15. musical frequencies, allowing non-western musical styles).
  16.  
  17.     MIDI data comes in a stream of bytes. Bytes which have the high bit (bit 7)
  18. set are _status bytes_. Bytes which have the high bit cleared are _data bytes_.
  19.  
  20.     Each midi message consists of a status byte followed by zero or more
  21. data bytes. The number of data bytes depends on the status byte.
  22.  
  23.     Midi messages are organized into the following general classes:
  24.  
  25.     Channel Messages (status bytes $80-$EF)
  26.     System Common Messages (status bytes $F0-$F7)
  27.     System Real-Time Messages (status bytes $F8-$FF)
  28.  
  29.     Channel messages are messages which are sent to specific MIDI "channels".
  30. Each channel message has a 4-bit channel number which is stored in bits 0-3
  31. of the status byte for that message. MIDI instruments generally listen to one
  32. or more channels, and any messages which have a channel number which the
  33. instrument is not listening to is ignored. In addition, a MIDI instrument
  34. may assign instruments or other state information on a channel-by-channel
  35. basis, for example channel #1 might be a trumpet sound, channel #2 an organ,
  36. etc.
  37.  
  38.     System Common messages and System Real-time messages generally cause
  39. global changes to the instrument. The difference between the two is that
  40. the latter are generally very short and tend to come rapidly.
  41.  
  42.     The include file "mididefs.h" supplied with CAMD lists all the types
  43. of status bytes (the status bytes for each type of channel message is defined
  44. without the channel number -- you must OR in the channel number into the
  45. status byte. So for example, the "Note On" messages is listed as 0x90, but
  46. can actually be any value between 0x90 and 0x9F, depending on the channel).
  47.  
  48.     Running Status: In order to increase the limited bandwidth of MIDI
  49. devices, a form of simple compression called running status is used.
  50. Basically, what this means is that you can omit a status byte if the
  51. previous status byte was exactly the same. So for example, if you wanted
  52. to turn on two notes on the same channel, instead of sending the
  53. byte stream:
  54.  
  55.         0x92 0x41 0x12
  56.         0x92 0x52 0x44
  57.  
  58.     You could send:
  59.  
  60.         0x90 0x41 0x12 0x52 0x44
  61.  
  62.     Note that only Channel messages may use running status. This is because
  63. channel messages are all fixed in length, while many types of system messages
  64. are variable length (They continue until the next status byte).
  65.  
  66.     Fortunately, if you're writing an application that uses the CAMD library,
  67. you don't need to worry about running status or the number of data bytes
  68. because CAMD automatically handles running status on both input and output,
  69. and knows how long each message should be. But there may be times when you
  70. need to deal with MIDI streams directly.
  71.  
  72.     The most important MIDI messages to support are "note on" and "note off".
  73. All other messages can simply be ignored for a minimalist implementation.
  74. A "note on" message consists of three bytes:
  75.  
  76.         status byte (0x90 plus the channel number)
  77.         pitch       (in other words, the keyboard key that was hit, 0-127,
  78.                      where 60 is middle C)
  79.         velocity    (How hard you hit the key, 1-127. 0 is a special case.
  80.                     Velocity usually affects how loudly the note is played)
  81.  
  82.     A "Note Off" message has exactly the same format, except that the
  83. status byte is (0x80 | channel number) instead of (0x90 | channel number).
  84.  
  85.     Most instruments support _polyphony_, which means that multiple note-on
  86. messages can be sent to turn on several notes at once, and then later
  87. note-off messages can be sent to turn them off again. Each note-off will
  88. turn off one note of the given pitch. The velocity field for note-offs is
  89. usually ignored in most instruments, but can be used for special effects
  90. such as decay rate.
  91.  
  92.     There are two additional ways to turn off a note.
  93.  
  94.     The first of these is to send a note-on with a velocity of zero. This
  95. is exactly equivalent to sending a note-off with a velocity of 64. The
  96. reason for this is to take greater advantage of running-status compression.
  97. This allows many note-on's and note-off's to be sent without changing the
  98. status byte.
  99.  
  100.     The second is the "All notes off" command. This is a special command
  101. supported by some instruments, and is detailed in the MIDI specification.
  102. You don't need to support it for a first cut implementation. The reason
  103. for this command is simple: Since the MIDI note-on and note-off messages
  104. are seperate messages, it is possible for notes to become "stuck" if the
  105. MIDI cable is unplugged (or other transmission problem occurs, such as
  106. crashing the computer) between the note-on and the note-off command.
  107. Since the note-off command never arrived, the note will continue to play
  108. (annoying everyone in the room) even if the cable is plugged back in.
  109. (Note that unlike serial cables, it is electically safe to abuse MIDI cables
  110. this way). "All Notes Off" is a conveniant way to silence everything on a
  111. channel.
  112.